package com.evil.application.api;

import com.evil.application.config.FeignErrorDecoder;
import com.evil.application.pojo.dto.template.UploadTemplateReqDTO;
import com.evil.application.pojo.dto.template.imp.*;
import com.evil.common.core.constant.ServiceNameConstant;
import com.evil.common.file.dto.FileRespDTO;
import com.evil.common.file.dto.xml.XmlNodeTreeRespDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 导入模板服务
 *
 * @author liyang
 * @date 2023-04-06 17:51
 */
@FeignClient(name = ServiceNameConstant.APPLICATION_SERVICE, configuration = {FeignErrorDecoder.class})
public interface RemoteApplicationImportTemplateService {

    /**
     * 获取打印模板列表
     *
     * @param importTemplateListReqDTO templateListReqDTO
     * @return List
     */
    @PostMapping("/remote/application/import-template/list")
    List<ImportTemplateRespDTO> list(@Validated @RequestBody ImportTemplateListReqDTO importTemplateListReqDTO);

    /**
     * 新增打印模板
     *
     * @param saveImportTemplateReqDTO addUploadTemplateReqDTO
     */
    @PostMapping("/remote/application/import-template/save")
    void save(@Validated @RequestBody SaveImportTemplateReqDTO saveImportTemplateReqDTO);

    /**
     * 重命名打印模板
     *
     * @param renameImportTemplateReqDTO templateRenameReqDTO
     */
    @PostMapping("/remote/application/import-template/rename")
    void rename(@Validated @RequestBody RenameImportTemplateReqDTO renameImportTemplateReqDTO);

    /**
     * 删除打印模板
     *
     * @param deleteImportTemplateReqDTO deleteTemplateReqDTO
     */
    @PostMapping("/remote/application/import-template/delete")
    void delete(@Validated @RequestBody DeleteImportTemplateReqDTO deleteImportTemplateReqDTO);

    /**
     * 打印模板详情
     *
     * @param importTemplateDetailReqDTO templateDetailReqDTO
     * @return TemplateRespDTO
     */
    @PostMapping("/remote/application/import-template/detail")
    ImportTemplateRespDTO detail(@Validated @RequestBody ImportTemplateDetailReqDTO importTemplateDetailReqDTO);

    /**
     * 上传打印模板
     *
     * @param uploadTemplateReqDTO uploadTemplateReqDTO
     */
    @PostMapping(value = "/remote/application/import-template/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    FileRespDTO upload(@Validated UploadTemplateReqDTO uploadTemplateReqDTO);

    /**
     * 下载打印模板
     *
     * @param downloadImportTemplateReqDTO downloadTemplateReqDTO
     * @return FileRespDTO
     */
    @PostMapping("/remote/application/import-template/download")
    FileRespDTO download(@Validated @RequestBody DownloadImportTemplateReqDTO downloadImportTemplateReqDTO);

    /**
     * 读取xml文件
     *
     * @param fileCode fileCode
     * @return XmlNodeTreeRespDTO 列表
     */
    @PostMapping("/read-xml-node")
    List<XmlNodeTreeRespDTO> readXmlNode(@RequestParam("fileCode") String fileCode);

    /**
     * 导入模板数据
     *
     * @param importTemplateReqDTO importTemplateReqDTO
     */
    @PostMapping("/remote/application/import-template/import")
    FileRespDTO importTemplate(@Validated @RequestBody ImportTemplateReqDTO importTemplateReqDTO);
}
